Rate limiting involves the setting and implementation of traffic rates such that users or services may not utilize more bandwidth then they have been apportioned. This is especially useful in selling varying levels of traffic allowances to users depending upon how much they want to spend and what services they typically use.
These traffic rates are commonly set by an ISP and the switches within the network have access to these traffic rates, and limit usage accordingly. This may be accomplished by dividing a second into many time intervals, converting the configured rate into credits for each interval, and decrementing the credits for each packet sent or received. However, this mechanism lacks effectiveness in the real world as often the actual rate of traffic flow for a particular user or service varies from the configured limit due to a number of factors. A credit cannot be partially consumed, thus the amount of bandwidth used in a given cycle may be artificially less than or greater than the configured limit. While this may not present a major problem in any particular cycle, over time this variation can become much more pronounced. Additionally, traffic does not always arrive on a consistent basis. A large amount of traffic may arrive in one cycle, only to have none arrive in the next cycle. In this case, the traffic arriving in the first cycle may be subject to the rate limit and packets may be dropped. This leads to an overall rate over the two cycles being perhaps significantly less that the desired rate limit. Furthermore, the application sending the packets, such as a Transmission Control Protocol (TCP) application, may automatically slow down its rate of sending packets when packets get dropped by the switch. These factors result in actual traffic rates varying significantly from configured rates.
Thus, what is needed is a solution which does not suffer from the drawbacks of prior solutions.